<?php

namespace lico\Runtime;

class Build
{
    public function __construct()
    {
        
    }
    
    public function run()
    {

        $this->appBuild();

        $this->publicBuild();

        $this->logBuild();

        $this->databaseBuild();

        $this->configBuild();

        $this->middlewareBuild();

        $this->routeBuild();

        return true;
    }

    /**
     * 应用文件夹初始化
     */
    protected function appBuild()
    {

        //应用文件夹
        $app = constant("SYSCONFIG")['App'];
        $realApp = ROOT_PATH . $app['main'];
        if (!is_dir($realApp)) {
            mkdir($realApp, 0755);
        }

        // 文件夹
        $controllerFolder = $realApp . DS . 'controller';
        $versionFolder = $controllerFolder . DS . $app['module'] . DS . $app['version'];
        if (!is_dir($versionFolder)) {
            mkdir($versionFolder, 0755, true);
        }
        //
        if (!file_exists($versionFolder . DS . ucfirst($app['controller']) . EXT)) {
            $defaultControllerClass = '<?php namespace lico\\controller\\' . $app['module'] . '\\' . $app['version'] . ' \r\n class ' . $app['controller'] . '{  }';
            file_put_contents($versionFolder . DS . $app['controller'] . EXT, $defaultControllerClass);
        }

        //模型文件夹
        $modelFolder = $realApp . DS . 'model';
        if (!is_dir($modelFolder)) {
            mkdir($modelFolder, 0755);
        }

        //视图文件夹
        $modelFolder = $realApp . DS . 'views';
        if (!is_dir($modelFolder)) {
            mkdir($modelFolder, 0755);
        }

        return true;
    }

    /**
     * 公共资源文件夹初始化
     */
    protected function publicBuild()
    {

        $public = constant("SYSCONFIG")['Public'];
        $realPublic = ROOT_PATH . $public['main'];
        if (!is_dir($realPublic)) {
            mkdir($realPublic, 0755, true);
        }

        if (!is_dir($realPublic . DS . $public['static'])) {
            mkdir($realPublic . DS . $public['static'], 0755);
        }

        return true;
    }

    /**
     * 数据库文件夹初始化
     */
    protected function databaseBuild()
    {

        $database = constant("SYSCONFIG")['Database'];
        $realDatabase = ROOT_PATH . $database['main'];
        if (!is_dir($realDatabase)) {
            mkdir($realDatabase, 0755, true);
        }

        $appDefaultModule = constant("SYSCONFIG")['App']['module'];
        if (!file_exists($realDatabase . DS . $appDefaultModule . EXT)) {
            $defaultConfig = file_get_contents(LICO_PATH . DS . "Const" . DS . "database" . EXT);
            file_put_contents($realDatabase . DS . $appDefaultModule . EXT, $defaultConfig);
        }
        return true;
    }

    /**
     * 日志文件夹初始化
     */
    protected function logBuild()
    {

        $log = constant("SYSCONFIG")['Log']['main'];
        $realLog = ROOT_PATH . $log;
        if (!is_dir($realLog)) {
            mkdir($realLog, 0755, true);
        }

        return true;
    }

    /**
     * 配置文件夹初始化
     */
    protected function configBuild()
    {

        $config = constant("SYSCONFIG")['Config']['main'];
        $realConfig = ROOT_PATH . $config;
        if (!is_dir($realConfig)) {
            mkdir($realConfig, 0755, true);
        }

        $appDefaultModule = constant("SYSCONFIG")['App']['module'];
        if (!file_exists($realConfig . DS . $appDefaultModule . EXT)) {
            $defaultConfig = file_get_contents(LICO_PATH . DS . "Const" . DS . "config" . EXT);
            file_put_contents($realConfig . DS . $appDefaultModule . EXT, $defaultConfig);
        }

        return true;
    }

    /**
     * 中间件文件夹初始化
     */
    protected function middlewareBuild()
    {

        $config = constant("SYSCONFIG")['Middleware']['main'];
        $realConfig = ROOT_PATH . $config;
        if (!is_dir($realConfig)) {
            mkdir($realConfig, 0755, true);
        }

        return true;
    }

    /**
     * 路由文件夹初始化
     */
    protected function routeBuild()
    {

        $config = constant("SYSCONFIG")['Route'];
        $realConfig = ROOT_PATH . $config['main'];
        if (!is_dir($realConfig)) {
            mkdir($realConfig, 0755, true);
        }

        return true;
    }
}
